package models

import (
	"gorm.io/gorm"
	"time"
	"user_srv/basic/config"
)

// 用户表
type User struct {
	Id                      uint64         `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	NickName                string         `gorm:"column:nick_name;type:varchar(255);comment:昵称;default:NULL;" json:"nick_name"`                                                 // 昵称
	RealName                string         `gorm:"column:real_name;type:varchar(255);comment:真实姓名;default:NULL;" json:"real_name"`                                             // 真实姓名
	Mobile                  string         `gorm:"column:mobile;type:varchar(255);comment:电话号码;default:NULL;" json:"mobile"`                                                   // 电话号码
	Password                string         `gorm:"column:password;type:varchar(255);comment:密码;default:NULL;" json:"password"`                                                   // 密码
	IdCard                  string         `gorm:"column:id_card;type:varchar(255);comment:身份证号;default:NULL;" json:"id_card"`                                                 // 身份证号
	Sex                     string         `gorm:"column:sex;type:varchar(255);comment:性别;default:NULL;" json:"sex"`                                                             // 性别
	Address                 string         `gorm:"column:address;type:varchar(255);comment:地址;default:NULL;" json:"address"`                                                     // 地址
	UserRegisterTime        time.Time      `gorm:"column:user_register_time;type:datetime;comment:用户注册时间;default:NULL;" json:"user_register_time"`                           // 用户注册时间
	UserLoginTime           time.Time      `gorm:"column:user_login_time;type:datetime;comment:用户上次登录时间;default:NULL;" json:"user_login_time"`                             // 用户上次登录时间
	LastLoginMethod         uint32         `gorm:"column:last_login_method;type:int UNSIGNED;comment:上次登录方式;default:NULL;" json:"last_login_method"`                         // 上次登录方式
	LastLoginTimeOnScreen   time.Time      `gorm:"column:last_login_time_on_screen;type:datetime;comment:上次登录大屏时间;default:NULL;" json:"last_login_time_on_screen"`         // 上次登录大屏时间
	LastLoginMethodOnScreen uint32         `gorm:"column:last_login_method_on_screen;type:int UNSIGNED;comment:上次登录大屏方式;default:NULL;" json:"last_login_method_on_screen"` // 上次登录大屏方式
	LastOrderTime           time.Time      `gorm:"column:last_order_time;type:datetime;comment:最近下单时间;default:NULL;" json:"last_order_time"`                                 // 最近下单时间
	CType                   int32          `gorm:"column:c_type;type:int;comment:状态：1：已实名，2：未实名;default:NULL;" json:"c_type"`                                              // 状态：1：已实名，2：未实名
	UserRole                uint8          `gorm:"column:user_role;type:tinyint UNSIGNED;comment:用户角色: 1乘客 2司机 3管理员;not null;" json:"user_role"`                        // 用户角色: 1乘客 2司机 3管理员
	CreatedAt               time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt               time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt               gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (u *User) TableName() string {
	return "user"
}

// 注册用户
func (u *User) Create() error {
	return config.DB.Create(&u).Error
}

// 获取用户电话
func (u *User) GetUserByMobile() error {
	return config.DB.Where("mobile = ?", u.Mobile).Limit(1).Find(&u).Error
}

func (u *User) GetUserById() error {
	return config.DB.Where("id = ?", u.Id).Limit(1).Find(&u).Error
}

// 获取用户信息
func (u *User) GetOneByFields(where *User) bool { //根据字段查询用户
	if err := config.DB.Where(where).Limit(1).Find(&u).Error; err != nil {
		return false
	}
	return true
}

func (u *User) Update() bool { //用户信息更新
	if err := config.DB.Updates(&u).Error; err != nil {
		return false
	}
	return true
}

func (u *User) UpdateUser(where *User) bool { //用户信息更新
	if err := config.DB.Where(where).Updates(&u).Error; err != nil {
		return false
	}
	return true
}
